package com.itheima.edu.info.manager.controller;

import com.itheima.edu.info.manager.domain.Student;
import com.itheima.edu.info.manager.service.StudentService;

import java.util.Scanner;

/*
    客服类
        1.接收用户请求
        2.指挥业务员干活
        3.将处理结果展示给用户
 */
public class StudentController {
    private Scanner sc = new Scanner(System.in);
    private StudentService stuser = new StudentService();

    //客服类中展示学生管理系统功能菜单的方法
    public void start() {

        //循环展示学生管理系统功能菜单
        while (true) {
            System.out.println("------欢迎来到<学生>管理系统------");
            System.out.println("1.添加学生");
            System.out.println("2.删除学生");
            System.out.println("3.修改学生");
            System.out.println("4.查看学生");
            System.out.println("5.退出");

            //键盘录入功能选择
            String option = sc.next();

            //根据option的值进行功能路由
            switch (option) {
                case "1":
                    addStudent();
                    break;
                case "2":
                    deleteStudent();
                    break;
                case "3":
                    updateStudent();
                    break;
                case "4":
                    findAllStudent();
                    break;
                case "5":
                    System.out.println("感谢使用学生管理系统,再见!");
                    return;
                default:
                    System.out.println("您的输入有误,请重新输入!");
                    break;

            }

        }


    }

    //添加功能
    public void addStudent() {
        //1.让用户键盘录入一个可用学号并接收
        System.out.println("请输入学生学号");
        String id = inputIdInfo(false);

        //2.录入学生信息并封装成学生对象
        Student stu = inputStudentInfo(id);

        //3.指挥业务员进行添加学生业务
        boolean result = stuser.addStudent(stu);

        //4.根据返回结果向用户展示信息
        if (result) {
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }

    }

    //删除功能
    public void deleteStudent() {
        //1.指挥业务员查询系统数据,返回所有数据
        Student[] stus = stuser.findAllStudent();
        //校验当前系统中是否有数据
        if (stus == null) {
            System.out.println("当前系统无信息,请添加后重试!");
            return;
        }

        System.out.println("请输入您要删除的学生学号");
        String id = sc.next();
        //判断录入学号是否存在
        boolean result = stuser.isExists(id);
        if (!result) {
            System.out.println("学号不存在,请确认后重新输入");
        } else {
            //指挥业务员进行删除操作
            stuser.deleteStudent(id);
            System.out.println("删除成功");
        }
    }

    //修改功能
    public void updateStudent() {
        //指挥业务员查询系统数据,返回所有数据
        Student[] stus = stuser.findAllStudent();
        //校验当前系统中是否有数据
        if (stus == null) {
            System.out.println("当前系统无信息,请添加后重试!");
            return;
        }
        //键盘录入一个可用学号并接收
        System.out.println("请输入要修改的学生学号");
        String updateId = inputIdInfo(true);
        //录入新的学生信息并封装成新的学生对象
        Student stu = inputStudentInfo(updateId);
        //指挥业务员类进行修改
        stuser.updateStudent(updateId, stu);
        System.out.println("修改成功");
    }

    //查看功能
    public void findAllStudent() {
        //1.指挥业务员查询系统数据,返回所有数据
        Student[] stus = stuser.findAllStudent();
        //校验当前系统中是否有数据
        if (stus == null) {
            System.out.println("当前系统无信息,请添加后重试!");
            return;
        }

        //2.遍历系统数据,展示给用户
        //2.1先打印表头数据
        System.out.println("学号\t\t姓名\t年龄\t出生日期");
        for (int i = 0; i < stus.length; i++) {
            Student stu = stus[i];
            if (stu != null) {
                System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t\t" + stu.getBirthday());
            }
        }
    }

    //键盘录入得到一个可用学号的方法
    public String inputIdInfo(boolean flag) {
        String id;
        while (true) {
            id = sc.next();
            if (stuser.isExists(id) == flag) {
                break;
            } else {
                System.out.println("学号不可用,请重新输入!");
            }
        }
        return id;
    }

    //封装学生对象的功能
    public Student inputStudentInfo(String id) {
        System.out.println("请输入学生姓名");
        String name = sc.next();
        System.out.println("请输入学生年龄");
        String age = sc.next();
        System.out.println("请输入学生出生日期");
        String birthday = sc.next();

        //2.将录入的学生信息封装成学生对象
        Student stu = new Student();
        stu.setId(id);
        stu.setName(name);
        stu.setAge(age);
        stu.setBirthday(birthday);

        return stu;

    }

}
